#ifndef ILLUMINATION_HPP
#define ILLUMINATION_HPP
#include "ray.hpp"
#include "light.hpp"
#include "color.hpp"
#include "vector.hpp"
#include "material.hpp"
#include "scene.hpp"
#include "object.hpp"
/* Debugging purpose */
#include <iostream>
using namespace std;

class Illumination {
public:
	Illumination(void);
	~Illumination(void);

	Color calculate_color_rec(const int,const Ray&, Vector, Scene*, const unsigned short) const;
	Color calculate_color(const int,const Ray&,const Vector&,Scene*) const;
	
	Vector calculate_reflection(const Vector&,const Vector&) const;
	bool shadow_testing(Scene*,Light*,const Vector&) const;
	Vector light_vector(Light*,const Vector&) const;
	Ray reflected_ray(const Ray&,const Vector&,const Vector&) const;
	double calculate_diffuse(const Vector&,const Vector&) const;
	double calculate_specular(const Vector&,const Vector&,const Ray&) const;
	
private:
        /*No attributes */
};

#endif

